{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 226,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import sys\n",
    "sys.path.append('../')\n",
    "from cycada.data.data_loader import get_dataset\n",
    "import PIL.Image as Image\n",
    "from os.path import join\n",
    "import os"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using downloaded and verified file: /x/jhoffman/svhn/train_32x32.mat\n"
     ]
    }
   ],
   "source": [
    "from torchvision import datasets\n",
    "\n",
    "mnist_dataset = datasets.MNIST('/x/jhoffman/mnist/', train=True, transform=None, \n",
    "                               target_transform=None, download=True)\n",
    "svhn_dataset = datasets.SVHN('/x/jhoffman/svhn/', split='train', transform=None, \n",
    "                             target_transform=None, download=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "metadata": {},
   "outputs": [],
   "source": [
    "outdir = '/x/jhoffman/cyclegan_data/svhn2mnist'\n",
    "# SVHN->MNIST: convert to 32x32x3 images\n",
    "\n",
    "os.makedirs(join(outdir, 'trainB/images'), exist_ok=True)\n",
    "with open(join(outdir, 'trainB/labels.txt'), 'w') as label_file:\n",
    "    for i in range(len(mnist_dataset)):\n",
    "        img = Image.fromarray(mnist_dataset.train_data[i].numpy())\n",
    "        img = img.resize([32,32])\n",
    "        img = img.convert('RGB')\n",
    "        img.save(join(outdir, 'trainB/images', '{:d}.png'.format(i)))\n",
    "        label_file.write('{:d} {:d}\\n'.format(i, mnist_dataset.train_labels[i]))\n",
    "     \n",
    "\n",
    "os.makedirs(join(outdir, 'trainA/images'), exist_ok=True)\n",
    "svhn_labels = svhn_dataset.labels.flatten()\n",
    "with open(join(outdir, 'trainA/labels.txt'), 'w') as label_file:\n",
    "    for i in range(len(svhn_dataset)):\n",
    "        img = Image.fromarray(svhn_dataset.data[i].transpose(1,2,0))\n",
    "        img.save(join(outdir, 'trainA/images', '{:d}.png'.format(i)))\n",
    "        label_file.write('{:d} {:d}\\n'.format(i, svhn_labels[i]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# CUDA_VISIBLE_DEVICES=1 python train.py --name experiment_name \n",
    "# --dataroot path_to_gta2cityscape --resize_or_crop=crop --loadSize=360 --fineSize=360 --identity 1.0 \n",
    "# --which_model_netD n_layers --n_layers_D 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#CUDA_VISIBLE_DEVICES=1 python cyclegan/train.py --name test_svhn2mnist \n",
    "# --dataroot /x/jhoffman/cyclegan_data/svhn2mnist/ --resize_or_crop=None \n",
    "# --loadSize=32 --fineSize=32 --which_model_netD n_layers --n_layers_D 3 --no_flip\n",
    "# --model cycle_gan --lambda_A 1 --lambda_B 1 --identity 1.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f0ba55ecf28>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "dirname = join(outdir, 'trainB')\n",
    "for i in range(10):\n",
    "    img = Image.open(join(dirname, '{:d}.png'.format(i)))\n",
    "\n",
    "    plt.subplot(5,5,i+1)\n",
    "    plt.imshow(img)\n",
    "    plt.grid('off')\n",
    "    plt.axis('off')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f0b91dbf940>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "dirname = join(outdir, 'trainA')\n",
    "for i in range(10):\n",
    "    img = Image.open(join(dirname, '{:d}.png'.format(i)))\n",
    "    plt.subplot(5,5,i+1)\n",
    "    plt.imshow(img)\n",
    "    plt.grid('off')\n",
    "    plt.axis('off')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y = svhn_dataset.labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7f0b949cb630>"
      ]
     },
     "execution_count": 171,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\ngg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f0ba56f5630>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "count,bins = np.histogram(y.squeeze(), bins=10)\n",
    "plt.bar(range(10), count); plt.title('P(Y) for SVHN')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 210,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "min_num = min(count)\n",
    "ind = np.zeros((10,min_num), dtype=int)\n",
    "for i in np.unique(y):\n",
    "    binary_ind = np.where(y.squeeze() == i)[0]\n",
    "    np.random.shuffle(binary_ind)\n",
    "    \n",
    "    ind[i-1,:] = binary_ind[:min_num]\n",
    "\n",
    "ind = ind.flatten()\n",
    "np.random.shuffle(ind)\n",
    "y_new = y[ind]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7f0b91adf390>"
      ]
     },
     "execution_count": 214,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\ngg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f0bc1cca7b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "count_new,_ = np.histogram(y_new, bins=10)\n",
    "plt.bar(range(10), count_new); plt.title('P(Y) SVHN balanced')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 248,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('/x/jhoffman/cyclegan_data/svhn2mnist/trainA/labels.txt', 'r') as f:\n",
    "    data = f.read().splitlines()\n",
    "\n",
    "parse = np.array([(int(x.split(' ')[0]), int(x.split(' ')[1])) for x in data])\n",
    "d = dict(parse)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
